<?php
/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 */


/**
 * Classe pour la gestion des comptes utilisateur / administrateur - annonceur
 *
 *
 */
class compteSrv {

    /**
     * Fonction permettant d'avoir la liste des utilisateurs
     * @return object $liste
     *
     */
    public function liste () {

        // instanciation de la factory
        $maFactory = jDao::get("commun~user");

        $records = $maFactory->getListWithProfile();

        return $records->fetchAll();
    }

    /**
     * Fonction permettant d'avoir un utilisateur à partir de son login
     * @param $login
     * @return object $liste
     *
     */
    public static function chargeParLogin ($login) {

        return  jAuth::getUser($login);
    }

    /**
     * Fonction permettant d'initialiser un objet compte
     * @param $login
     * @return object
     *
     */
    public function init () {

        return jDao::createRecord("commun~jlx_user");
    }

    /**
     * Fonction permettant d'ajouter un compte
     * @param object $compte
     * @return 
     *
     */
    public function ajouter ($compte) {
        $return = false;

        $user               = jAuth::createUserObject($compte->login, $compte->mdp);
        $user->email        = $compte->email;
        $user->usr_profile  = $compte->profil;
        try {
            jAuth::saveNewUser($user);
            $groupeId = ($compte->profil == PROFIL_ADMIN) ? GROUPE_ID_ADMINISTRATEUR : GROUPE_ID_ANNONCEUR;
            self::addUserToGroup($compte->login, $groupeId);
            $return = true;
        } catch (exception $e) {
            die($e->getMessage());
        }
        return $return;

    }

    /**
     * Fonction permettant de modifier un compte
     * @param object $compte
     * @return 
     *
     */
    public function modifier ($compte) {

        $user               = jAuth::getUser($compte->id);
        $user->email        = $compte->email;
        $user->usr_profile  = $compte->profil;
        try {
            $user_dataOld = self::chargeParLogin($compte->id);

            if ($user_dataOld->usr_profile != $compte->profil) {
                $groupeId    = ($user_dataOld->usr_profile == PROFIL_ADMIN) ? GROUPE_ID_ADMINISTRATEUR : GROUPE_ID_ANNONCEUR;
                $newGroupeId = ($groupeId == GROUPE_ID_ADMINISTRATEUR) ? GROUPE_ID_ANNONCEUR : GROUPE_ID_ADMINISTRATEUR;
                   
                self::removeUserFromGroup($compte->id, $groupeId);
                self::addUserToGroup($compte->id, $newGroupeId);
            }
            jAuth::updateUser($user);

        } catch (exception $e) {
            die($e->getMessage());
        }

    }


    /**
     * Fonction permettant de verifier un user par son login et son mail
     * @param $login
     * @param $email
     * @return boolean
     *
     */
    public function checkUser ($login, $email) {

        try {
            $user = self::chargeParLogin($login);
            if ($user) {
                return ($email == $user->email)? true : false;
            }
            return false;

        } catch (exception $e) {
            die($e->getMessage());
        }
    }

    /**
     * Fonction permettant d'envoyer un mail à un utilisateur qui a oublié son mdp
     * @param $login
     * @param $email
     * @return boolean
     *
     */
    public function sendUsersAcces ($login) {
        jClasses::inc("commun~communSrv");
        try {
            $user = self::chargeParLogin($login);

            communSrv::sendMail($user);

        } catch (exception $e) {
            die($e->getMessage());
        }
    }


    /**
     * Fonction permettant de supprimer un compte
     * @param $compteLogin
     * @return 
     *
     */
    public function supprimer ($compteLogin) {

        try {
            jAuth::removeUser($compteLogin);
            self::removeUser($compteLogin);
        } catch (exception $e) {
            print($e->getMessage());
        }
    }

    /**
     * add a user into a group
     *
     * (a user can be a member of several groups)
     * @param string $login the user login
     * @param string $groupid the group id
     */
    public static function addUserToGroup($login, $groupid){
        if( $groupid == '__anonymous')
            throw new Exception ('jAcl2DbUserGroup::addUserToGroup : invalid group id');
        $usergrp = jDao::createRecord('jacl2db~jacl2usergroup','jacl2_profile');
        $usergrp->login = $login;
        $usergrp->id_aclgrp = $groupid;
        jDao::get('jacl2db~jacl2usergroup','jacl2_profile')->insert($usergrp);
    }

    /**
     * remove a user from a group
     * @param string $login the user login
     * @param string $groupid the group id
     */
    public static function removeUserFromGroup($login,$groupid){
        jDao::get('jacl2db~jacl2usergroup', 'jacl2_profile')->delete($login,$groupid);
    }

    /**
     * unregister a user in the acl system
     * @param string $login the user login
     */
    public static function removeUser($login){
        $daogroup = jDao::get('jacl2db~jacl2group','jacl2_profile');

        // recupere le groupe privé
        $privategrp = $daogroup->getPrivateGroup($login);
        if(!$privategrp) return;

        // supprime les droits sur le groupe privé (jacl_rights)
        jDao::get('jacl2db~jacl2rights','jacl2_profile')->deleteByGroup($privategrp->id_aclgrp);

        // l'enleve de tous les groupes (jacl_users_group)
        jDao::get('jacl2db~jacl2usergroup','jacl2_profile')->deleteByUser($login);

        // supprime le groupe personnel du user (jacl_group)
        $daogroup->delete($privategrp->id_aclgrp);
    }

}